﻿#region Using Declaration

using System.Collections.Generic;
using System.ComponentModel;

#endregion Using Declaration

namespace T4_Eind_programma
{
    public class Vulbatch : INotifyPropertyChanged
    {
        #region Variable Declaration

        private int aantalVatenVulbaar;
        private Doeltank doeltank;
        private List<string> gebruikteApparaten = new List<string>();
        private int gevuldeVaten = 0;
        private bool klaar;
        private int mengbatchNummer;
        private int nummer;
        private int restVaten = 0;

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion Variable Declaration

        #region Properties

        public int AantalVaten
        {
            get { return aantalVatenVulbaar; }
            set { aantalVatenVulbaar = value; }
        }

        public Doeltank Doeltank
        {
            get { return doeltank; }
            set { doeltank = value; }
        }

        public List<string> GebruikteApparaten
        {
            get { return gebruikteApparaten; }
            set
            {
                SetField(ref gebruikteApparaten, value, "GebruikteApparaten");
            }
        }

        public int GevuldeVaten
        {
            get { return gevuldeVaten; }
            set { SetField(ref gevuldeVaten, value, "GevuldeVaten"); }
        }

        public bool Klaar
        {
            get { return klaar; }
            set
            {
                SetField(ref klaar, value, "Klaar");
            }
        }

        public int MengbatchNummer
        {
            get { return mengbatchNummer; }
            set { mengbatchNummer = value; }
        }

        public int Nummer
        {
            get { return nummer; }
            set { nummer = value; }
        }

        public int RestVaten
        {
            get { return restVaten; }

            set
            {
                SetField(ref restVaten, value, "RestVaten");
                gevuldeVaten = aantalVatenVulbaar - restVaten;
            }
        }

        #endregion Properties

        #region Constructor

        public Vulbatch(int nummer, int mengbatchNummer, int aantalVaten, bool klaar, Doeltank doeltank)
        {
            this.aantalVatenVulbaar = aantalVaten;
            this.klaar = klaar;
            this.mengbatchNummer = mengbatchNummer;
            this.nummer = nummer;
            this.doeltank = doeltank;
        }

        #endregion Constructor

        #region NotifyChanged

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }

        protected bool SetField<T>(ref T field, T value, string propertyName)
        {
            if (EqualityComparer<T>.Default.Equals(field, value)) return false;
            field = value;
            OnPropertyChanged(propertyName);
            return true;
        }

        #endregion NotifyChanged
    }
}